﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace CityGames
{
    public partial class FormPromocionesVisualizar : Form
    {
        static private Promocion promocion = new Promocion();
        static private Juego juego = new Juego();
        static private Plataforma plataforma = new Plataforma();
        static private Genero genero = new Genero();
        private FormContenedor contenedor;
        private DataSet dsJuegos;
        private const int numeroDeJuegosPorPagina = 10;
        private int numeroDePaginaActual;
        private int numeroDePaginasMaximo;
        private int codigoPromocion;

        public FormPromocionesVisualizar()
        {
            InitializeComponent();
        }

        private void FormPromocionesVisualizar_Load(object sender, EventArgs e)
        {
            contenedor = (FormContenedor)MdiParent;
            dsJuegos = new DataSet();

            numeroDePaginaActual = 1;
            codigoPromocion = -1;

            cbGenero.Items.Add("Todos");
            foreach (DataRow row in genero.ObtenerGeneros().Rows)
            {
                cbGenero.Items.Add(row[0].ToString());
            }
            cbGenero.SelectedItem = cbGenero.Items[0];

            cbPlataforma.Items.Add("Todas");
            foreach (DataRow row in plataforma.ObtenerPlataformas().Rows)
            {
                cbPlataforma.Items.Add(row[0].ToString());
            }
            cbPlataforma.SelectedItem = cbPlataforma.Items[0];

            CargarDataGridViewJuegos();
        }

        private void bMostrarTodos_Click(object sender, EventArgs e)
        {
            try
            {
                MostrarTodos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void MostrarTodos()
        {
            try
            {
                tbTitulo.Text = "";
                tbTitulo.Focus();
                dtpFechaInicio.Value = juego.ObtenerFechaMinima();
                dtpFechaFin.Value = juego.ObtenerFechaMaxima();
                cbGenero.SelectedItem = cbGenero.Items[0];
                cbPlataforma.SelectedItem = cbPlataforma.Items[0];

                numeroDePaginaActual = 1;

                CargarDataGridViewJuegos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void CargarDataGridViewJuegos()
        {
            try
            {
                numeroDePaginasMaximo = int.Parse(Math.Ceiling(double.Parse(juego.ObtenerNumeroDeJuegosDePromocionFiltrados(codigoPromocion, tbTitulo.Text, cbPlataforma.Text, cbGenero.Text).ToString()) / numeroDeJuegosPorPagina).ToString());

                if (numeroDePaginaActual == 0)
                    numeroDePaginaActual = 1;

                if (numeroDePaginaActual > numeroDePaginasMaximo)
                    numeroDePaginaActual = numeroDePaginasMaximo;

                dsJuegos = juego.ObtenerJuegosDePromocionPaginados(codigoPromocion, tbTitulo.Text, cbPlataforma.Text, cbGenero.Text, numeroDeJuegosPorPagina * (numeroDePaginaActual - 1), numeroDePaginaActual * numeroDeJuegosPorPagina);
                dgvJuegos.DataSource = dsJuegos;
                dgvJuegos.DataMember = "JuegosDePromocion";
                lblPaginaDGV.Text = "Página " + numeroDePaginaActual.ToString() + " de " + numeroDePaginasMaximo.ToString();

                if (numeroDePaginaActual <= 1)
                {
                    bDGVPaginaAnterior.Enabled = false;
                    bDGVPrimeraPagina.Enabled = false;
                }
                else
                {
                    bDGVPaginaAnterior.Enabled = true;
                    bDGVPrimeraPagina.Enabled = true;
                }

                if (numeroDePaginaActual == numeroDePaginasMaximo)
                {
                    bDGVPaginaSiguiente.Enabled = false;
                    bDGVUltimaPagina.Enabled = false;
                }
                else
                {
                    bDGVPaginaSiguiente.Enabled = true;
                    bDGVUltimaPagina.Enabled = true;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        public bool CargarDatosPromocion(int codigo)
        {
            bool resultado = false;

            try
            {
                codigoPromocion = codigo;
                DataSet dsPromocion = promocion.ObtenerDatosPromocion(codigoPromocion);

                if (dsPromocion.Tables[0].Rows.Count > 0)
                {
                    tbNombrePromocion.Text = (string)dsPromocion.Tables[0].Rows[0]["NombrePromocion"];
                    switch ((int)dsPromocion.Tables[0].Rows[0]["TipoDescuento"])
                    {
                        case 1: // Descuento por euros
                            rbDescuentoEuros.Checked = true;
                            tbDescuentoEuros.Text = dsPromocion.Tables[0].Rows[0]["CantidadDescuento"].ToString();
                            break;
                        case 2: // Descuento por porcentaje
                            rbDescuentoPorcentaje.Checked = true;
                            tbPorcentaje.Text = dsPromocion.Tables[0].Rows[0]["CantidadDescuento"].ToString();
                            break;
                        case 3: // Descuento 2x1
                            rbPromocion2x1.Checked = true;
                            break;
                    }

                    dtpFechaInicio.Value = DateTime.Parse(dsPromocion.Tables[0].Rows[0]["FechaInicio"].ToString());
                    dtpFechaFin.Value = DateTime.Parse(dsPromocion.Tables[0].Rows[0]["FechaFin"].ToString());

                    CargarDataGridViewJuegos();

                    resultado = true;
                }
                else
                {
                    MessageBox.Show("Error al cargar los datos de la promocion.    ", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            return resultado;
        }

        private void tbTitulo_TextChanged(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = 1;
                CargarDataGridViewJuegos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }



        private void cbPlataforma_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = 1;
                CargarDataGridViewJuegos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void cbGenero_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = 1;
                CargarDataGridViewJuegos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bDGVUltimaPagina_Click(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = numeroDePaginasMaximo;
                CargarDataGridViewJuegos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bDGVPaginaSiguiente_Click(object sender, EventArgs e)
        {
            try
            {
                if (numeroDePaginaActual < numeroDePaginasMaximo)
                {
                    numeroDePaginaActual++;
                    CargarDataGridViewJuegos();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bDGVPaginaAnterior_Click(object sender, EventArgs e)
        {
            try
            {
                if (numeroDePaginaActual > 1)
                {
                    numeroDePaginaActual--;
                    CargarDataGridViewJuegos();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bDGVPrimeraPagina_Click(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = 1;
                CargarDataGridViewJuegos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bCancelar_Click(object sender, EventArgs e)
        {
            try
            {
                contenedor.hijoFormPromocionesGestion.Focus();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
    }
}
